////=======================================================
//// 作者：KingSley
//// 描述：
////=======================================================
//using UnityEngine;
//using System.Collections;
//using System.Collections.Generic;
//using System.IO;
//using System.Reflection;
//using System;
//using UnityEngine.UI;

//namespace Babybus.Uno
//{
//    public class CSVSeniorManager : MonoBehaviour
//    {
//        private string filePath;
//        [SerializeField] private Button _loadBtn;
//        [SerializeField] private Text _display;

//        private void Start()
//        {
//            filePath = Application.dataPath + @"/Resources/Load/TestTable.csv";

//            _display = GameObject.Find("Text").GetComponent<Text>();
//            _loadBtn = GameObject.Find("LoadButton").GetComponent<Button>();

//            _loadBtn.onClick.RemoveAllListeners();
//            _loadBtn.onClick.AddListener(Load);
//        }

//        /// <summary>
//        /// 读取CSV文件数据（利用反射）
//        /// </summary>
//        /// <typeparam name="CsvData">CSV数据对象的类型</typeparam>
//        /// <param name="csvFilePath">CSV文件路径</param>
//        /// <param name="csvDatas">用于缓存数据的字典</param>
//        /// <returns>CSV文件所有行内容的数据对象</returns>
//        private Dictionary<int, T_CsvData> LoadCsvData<T_CsvData>(string csvFilePath)
//        {
//            Dictionary<int, T_CsvData> dic = new Dictionary<int, T_CsvData>();
//            /* 从CSV文件读取数据 */
//            Dictionary<string, Dictionary<string, string>> result = LoadCsvFile(csvFilePath);
//            /* 遍历每一行数据 */
//            foreach (string ID in result.Keys)
//            {
//                /* CSV的一行数据 */
//                Dictionary<string, string> datas = result[ID];
//                /* 读取Csv数据对象的属性 */
//                PropertyInfo[] props = typeof(T_CsvData).GetProperties();
//                /* 使用反射，将CSV文件的数据赋值给CSV数据对象的相应字段，要求CSV文件的字段名和CSV数据对象的字段名完全相同 */
//                T_CsvData obj = Activator.CreateInstance<T_CsvData>();
//                foreach (PropertyInfo pi in props)
//                {
//                    pi.SetValue(obj, Convert.ChangeType(datas[pi.Name], pi.PropertyType), null);
//                }
//                /* 按ID-数据的形式存储 */
//                dic[Convert.ToInt32(ID)] = obj;
//            }
//            return dic;
//        }

//        /// <summary>
//        /// 读取CSV文件
//        /// 结果保存到字典集合，以ID作为Key值，对应每一行的数据，每一行的数据也用字典集合保存。
//        /// </summary>
//        /// <param name="filePath"></param>
//        /// <returns></returns>
//        public Dictionary<string, Dictionary<string, string>> LoadCsvFile(string filePath)
//        {
//            Dictionary<string, Dictionary<string, string>> result = new Dictionary<string, Dictionary<string, string>>();

//            string[] fileData = File.ReadAllLines(filePath);

//            if (fileData.Length < 2)
//            {
//                return result;
//            }

//            /* CSV文件的第一行为Key字段，第二行开始是数据。第一个字段一定是ID。 */
//            string[] keys = fileData[0].Split(',');
//            for (int i = 1; i < fileData.Length; i++)
//            {
//                string[] line = fileData[i].Split(',');

//                /* 以ID为key值，创建一个新的集合，用于保存当前行的数据 */
//                string ID = line[0];
//                result[ID] = new Dictionary<string, string>();
//                for (int j = 0; j < line.Length; j++)
//                {
//                    /* 每一行的数据存储规则：Key字段-Value值 */
//                    result[ID][keys[j]] = line[j];
//                }
//            }

//            return result;
//        }

//        public void Load()
//        {
//            #region 没有泛型的做法
//            /* 把CSV文件按行存放，每一行的ID作为key值，内容作为value值 */
//            Dictionary<int, CSVDataObject> csvDataDic = new Dictionary<int, CSVDataObject>();
            
//            /* 从CSV文件读取数据 */
//            Dictionary<string, Dictionary<string, string>> datasDic = LoadCsvFile(filePath);

//            /* 遍历每一行数据 */
//            foreach (string ID in datasDic.Keys)
//            {
//                /* CSV的一行数据 */
//                Dictionary<string, string> datas = datasDic[ID];

//                /* 读取Csv数据对象的属性 */
//                PropertyInfo[] props = typeof(CSVDataObject).GetProperties();

//                /* 使用反射，将CSV文件的数据赋值给CSV数据对象的相应字段，要求CSV文件的字段名和CSV数据对象的字段名完全相同 */
//                CSVDataObject obj = new CSVDataObject();
//                foreach (PropertyInfo pi in props)
//                {
//                    pi.SetValue(obj, Convert.ChangeType(datas[pi.Name], pi.PropertyType), null);
//                }

//                /* 按ID-数据的形式存储 */
//                csvDataDic[int.Parse(obj.ID)] = obj;
//            }

//            /* 测试读取ID为1的数据 */
//            CSVDataObject csvDemo1 = csvDataDic[1];
//            Debug.Log("ID=" + csvDemo1.ID + "，Name=" + csvDemo1.Name);

//            #endregion

//            #region 有泛型的做法
//            /* 把CSV文件按行存放，每一行的ID作为key值，内容作为value值 */
//            Dictionary<int, CSVDataObject> csvDataDic2 = LoadCsvData<CSVDemo>(filePath);

//            /* 测试读取ID为2的数据 */
//            CSVDemo csvDemo2 = csvDataDic2[2];
//            Debug.Log("ID=" + csvDemo2.ID + "，Name=" + csvDemo2.Name);

//            #endregion
//        }
//    }
//}
